# -*- coding: utf-8 -*-
"""
轮动策略框架 | 邢不行 | 2024分享会
author: 邢不行
微信: xbx6660
"""
import os
import pandas as pd
import program.Functions as Func

_ = os.path.abspath(os.path.dirname(__file__))  # 返回当前文件路径
root_path = os.path.abspath(os.path.join(_, '..'))  # 返回根目录文件夹

# 回测结果数据路径。用于发帖脚本使用
back_test_path = root_path + '/data/回测结果/'

# 子策略的文件路径，需要指定框架文件夹下的中性策略回测文件夹
base_config_path = 'D:/bitcoin/trader/中性策略框架/中性策略框架/中性策略回测框架'
#base_config_path = 'E:/workspace/bitcoin/trader/中性策略框架2.1.2/中性策略框架/中性策略回测框架'


# 回测时间区间
start_date = '2021-06-01'  # 回测开始时间
end_date = '2024-08-01'  # 回测结束时间

# 策略文件名，调用哪个轮动策略
shift_name = 'Shift_QVBBIBIAS'

# 是否打印出统计信息
if_display_stat = True

# 全局多进程核心数量控制。建议最大设置：当前cpu最大核心数的一半
# 想知道自己的cpu有多少核心？ os.cpu_count() 可以查看
#n_jobs = int(os.cpu_count() / 2)
n_jobs = 59

# 根据指定子策略的Config文件，取出Config配置中相同的部分
config_path = os.path.join(base_config_path, 'program/Config.py')  # 拼接路径得到完整的Config路径
_config = Func.get_variable_from_py_file(config_path, {'spot_path': str, 'swap_path': str, 'spot_buy_crate': float,
                                                       'spot_sell_crate': float, 'swap_buy_crate': float, 'swap_sell_crate': float})  # 指定需要取出那些相同的配置
spot_path = _config['spot_path']  # 从返回的配置中取出现货路径
swap_path = _config['swap_path']  # 从返回的配置中取出合约路径
spot_buy_crate = _config['spot_buy_crate']  # 从返回的配置中取出现货买入手续费
spot_sell_crate = _config['spot_sell_crate']  # 从返回的配置中取出现货卖出手续费
swap_buy_crate = _config['swap_buy_crate']  # 从返回的配置中取出合约买入手续费
swap_sell_crate = _config['swap_sell_crate']  # 从返回的配置中取出合约买入手续费

info_path = os.path.join(back_test_path, '统计信息')
if not os.path.exists(info_path):
    os.makedirs(info_path)

# 定义一个开始的基准时间，避免周期转换出现问题
benchmark = pd.DataFrame(pd.date_range(start='2017-01-01', end=end_date, freq='1H'))  # 创建2017-01-01至回测结束时间的1H列表
benchmark.rename(columns={0: 'candle_begin_time'}, inplace=True)
